package cn.tedu.springdemo.day07;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Test01测试类
 */
public class Test01 {
    /**
     * DI依赖注入：
     * 使用注解方式(简洁)--IOC过程
     */
    @Test
    public void test01(){
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext14.xml");
        Student s=(Student) ac.getBean("student");
        System.out.println(s);
        Teacher t=(Teacher) ac.getBean("t");
        System.out.println(t);
        ((ClassPathXmlApplicationContext)ac).close();
    }

    /**
     * @Component注解：自动推断id是否是按照首字母小写
     *
     * @Component注解：Student类----自动推断---Student(按照首字母小写）×
     * @Component注解：Teacher类----自动推断---Teacher(按照首字母小写）×
     * @Component注解：PErson1类----自动推断---PErson1(按照首字母小写）×
     * @Component注解：pErson2类----自动推断---pErson1(按照首字母小写）×
     * 自动推断问题：并不是按照类首字母小写进行推断，按照类名的第二个字母进行推断
     *                第二个字母是小写，第一个字母小写
     *                第二个字母是大写，第一个字母不变
     *                第二个字母是小写，第一个字母小写
     * Spring---老美研发-----Person-----person首字母小写
     *                     USA      uSA
     */
    @Test
    public void test02(){
       ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext14.xml");
       //@Component注解：自动推断是否是按照首字母小写
        /*PErson1 p1=(PErson1)ac.getBean("pErson1");//PErson1----自动推断---PErson1
        System.out.println(p1);*/
        pErson2 p2=(pErson2)ac.getBean("pErson2");//pErson2----自动推断
        System.out.println(p2);
        ((ClassPathXmlApplicationContext)ac).close();
    }
    /**
     * Spring IOC-----支持工厂模式：静态工厂，实例工厂，Spring工厂
     * @Bean("必须指定id名称")注解:从工厂对象中，拿到具体的实例对象
     */
    @Test
    public void test03(){
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext14.xml");
        //获取是工厂对象（罐头工厂）中的对象（罐头）
        NetConnection nc=(NetConnection)ac.getBean("nc");
        nc.sendData();
        ((ClassPathXmlApplicationContext)ac).close();
    }

    /**
     * @Value注解使用测试
     */
    /**
     * 测试DI依赖注入写活值----配置的文件xx.properties
     */
    @Test
    public void test04(){
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext14.xml");
        Demo d=(Demo)ac.getBean("demo");
        System.out.println(d);
        ((ClassPathXmlApplicationContext)ac).close();
    }
}
